﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Cl.Utils.Helper
{
    public static class MomentHelper
    {

        /// <summary>
        /// 获取当前时间，往后取最近的半个小时节点。
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static DateTime ConvertBackwardNearestHalfHourTime(DateTime time)
        {
            int minutes = time.Minute;
            int hour = time.Hour;

            // 如果分钟数小于15，则四舍五入到上一个半小时节点
            if (minutes < 15)
            {
                minutes = 0;
            }
            // 如果分钟数大于等于15但小于45，则保持不变
            else if (minutes >= 15 && minutes < 45)
            {
                minutes = 30;
            }
            // 如果分钟数大于等于45，则四舍五入到下一个半小时节点
            else
            {
                hour += 1;
                minutes = 0;
            }

            // 处理小时数超过23的情况
            if (hour > 23)
            {
                hour -= 24;
            }

            return new DateTime(time.Year, time.Month, time.Day, hour, minutes, 0);
        }


        /// <summary>
        /// 获取当前时间，往前取最近的半个小时节点。
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static DateTime ConvertForwardNearestHalfHourTime(DateTime time)
        {
            int minutes = time.Minute;
            int hour = time.Hour;

            // 如果分钟数小于30，则保留当前小时
            // 如果分钟数大于或等于30，则减去一个小时
            if (minutes >= 30)
            {
                hour -= 1;
            }

            // 处理小时数小于0的情况
            if (hour < 0)
            {
                hour += 24;
            }

            // 设置分钟数为30
            minutes = 30;

            // 如果小时数为00:30，则减去一个小时
            if (hour == 0 && minutes == 30)
            {
                hour = 23;
            }

            return new DateTime(time.Year, time.Month, time.Day, hour, minutes, 0);
        }
    }
}
